const db = uniCloud.database();
const dbduty = db.collection('duty');
const dbdutyDriver = db.collection('duty-driver');

module.exports = {
	/**
	 * 查询值班记录，支持按日期范围查询
	 * @param {Object} event
	 * @param {String} event.startDate 开始日期（格式：YYYY-MM-DD）
	 * @param {String} event.endDate 结束日期（格式：YYYY-MM-DD）
	 */
	async getDuty(event) {
		const {
			startDate,
			endDate
		} = event;
		if (!startDate || !endDate) {
			return {
				errCode: 'MISSING_PARAMS',
				errMsg: '缺少开始或结束日期'
			};
		}
		try {
			const res = await dbduty
				.where({
					date: (db.command.gte(startDate).and(db.command.lte(endDate)))
				})
				.get();
			return {
				code: 0,
				message: 'success',
				data: res.data
			};
		} catch (err) {
			return {
				errCode: 'DB_ERROR',
				errMsg: '数据库查询失败: ' + err.message
			};
		}
	},

	// 新增值班记录，支持单条或批量添加
	async addDuty(event) {

		if (!event || typeof event !== 'object' || event.length === 0) {
			return {
				errCode: 'INVALID_DATA',
				errMsg: '数据不能为空且必须为对象格式'
			};
		}

		try {
			const res = await dbduty.add(event);
			return {
				code: 0,
				message: '添加成功',
				data: res
			};
		} catch (err) {
			return {
				errCode: 'DB_ERROR',
				errMsg: '数据库操作失败: ' + err.message
			};
		}
	},
	/**
	 * 更新值班记录，支持一次更新多天的数据
	 * @param {Object} event
	 * @param {Array} event.data 要更新的值班数据数组（需包含 date 字段）
	 */
	/**
	 * 提交值班信息（支持新增和更新）
	 * @param {Object} event
	 */
	async updateDuty(event) {
		// 参数校验
		if (!event.data || typeof event.data !== 'object') {
			return {
				errCode: 'INVALID_DATA',
				errMsg: '提交数据格式错误，必须为对象'
			};
		}
		if (event.data.length === 0) {
			return {
				errCode: 'EMPTY_DATA',
				errMsg: '提交数据为空'
			};
		}

		try {
			const promises = event.data.map(async (record) => {
				const {
					date
				} = record;

				// 查询该日期是否已存在
				const existing = await dbduty.where({
					date
				}).get();

				if (existing.data.length > 0) {
					// 已存在：更新数据
					return await dbduty.where({
						date
					}).update({
						...record,
						lastModified: new Date()
					});
				} else {
					// 不存在：新增数据
					return await dbduty.add({
						...record,
						lastModified: new Date()
					});
				}
			});

			const results = await Promise.all(promises);

			return {
				code: 0,
				message: '操作成功',
				data: results
			};
		} catch (err) {
			return {
				errCode: 'DB_ERROR',
				errMsg: '数据库操作失败: ' + err.message
			};
		}
	},


	//司机排班
	async getDutyDriver(event) {
		const {
			startDate,
			endDate
		} = event;

		if (!startDate || !endDate) {
			return {
				errCode: 'MISSING_PARAMS',
				errMsg: '缺少开始或结束日期'
			};
		}

		// 可选：确保日期格式正确
		const start = startDate.split(' ')[0]; // 去掉时间部分
		const end = endDate.split(' ')[0];

		// //console.log('查询范围:', start, '到', end);

		try {
			const res = await dbdutyDriver
				.where({
					"data.date": db.command.gte(start).and(db.command.lte(end))
				})
				.get();

			return {
				code: 0,
				message: 'success',
				data: res.data
			};
		} catch (err) {
			//console.error('数据库错误:', err);
			return {
				errCode: 'DB_ERROR',
				errMsg: '数据库查询失败: ' + err.message
			};
		}
	},

	async updateDutyDriver(event) {
		const data = event.data
		if (!Array.isArray(data)) {
			return {
				code: -1,
				msg: '参数错误，data 必须是数组'
			};
		}
		const successDates = [];
		const failedDates = [];
		for (const item of data) {
			const {
				date,
				groups
			} = item;
			// 校验日期格式
			// // //console.log(item,date,groups,'111111111')
			const dateRegex = /^\d{4}-\d{2}-\d{2}$/;

			if (!date || !dateRegex.test(date)) {
				failedDates.push({
					date,
					reason: '日期格式错误'
				});
				continue;
			}
			try {
				// 查询该日期是否已存在
				const res = await dbdutyDriver.where({
					"data.date": date
				}).get();
				// //console.log(res,'222222222')
				if (res.data && res.data.length > 0) {
					// 存在，更新
					await dbdutyDriver.doc(res.data[0]._id).update({
						data: {
							date,
							groups
						}
					});
					successDates.push({
						date,
						action: '更新'
					});
				} else {
					// 不存在，新增
					await dbdutyDriver.add({
						data: {
							date,
							groups
						}
					});
					successDates.push({
						date,
						action: '新增'
					});
				}
			} catch (e) {
				//console.error(`操作失败日期: ${date}`, e);
				failedDates.push({
					date,
					reason: '数据库错误'
				});
			}
		}
		return {
			code: 0,
			msg: '操作完成',
			successDates,
			failedDates
		};
	},	

	_before: function() {
		// 可以在这里做权限验证、登录校验等通用预处理
	},
};